#include <iostream>
using namespace std;


// 继承方式

// 父类
class Base1
{
public:
    int m_A;
protected:
    int m_B;
private:
    int m_C;
};

class Base2
{
public:
    int m_A;
protected:
    int m_B;
private:
    int m_C;
};

// 继承的好处：减少代码重复
// 语法：class 子类 ： 继承方式 父类
// 子类 也称为 派生类
// 父类 也称为 基类

// 公共继承
class Son1 : public Base1
{
public:
    void func()
    {
        m_A = 10;  // 父类中的公共权限  到子类中依然是公共权限
        m_B = 10;  // 父类中的保护权限  到子类中依然是保护权限
        // m_C = 10;  // 父类中的私有权限  到子类访问不到
    }
};

// 保护继承
class Son2 : protected Base2
{
public:
    void func()
    {
        m_A = 100;  // 父类中的公共权限  到子类中变为权限
        m_B = 100;  // 父类中的保护权限  到子类中依然是保护权限
        // m_C = 10;  // 父类中的私有权限  到子类访问不到
    }
};

void test01() 
{
    Son1 s1;
    s1.m_A = 100;
    // s1.m_B = 100; //保护权限无法在类外访问，只可在派生类中访问

} 

void test02() 
{
    Son2 s2;
    // s2.m_A = 100;  // 在 Son2 中， m_A 变为保护权限，因此访问
    // cout << s2.m_A << endl;
    // s1.m_B = 100;

} 

int main()
{
    test01();
    // cout << "hello" << endl;
    return 0;
}